#include <stdio.h>
#include "lexical.h"
#include "error.h"
#include "parser.h"
#include "sym_table.h"
#include "token_list.h"
#include "genir.h"

int main(int argc, const char *argv[])
{
    if (argc < 2)
        return -1;
    FILE *file  = fopen(argv[1], "r");
    if(!file) {
        printf("文件打开失败\n");
        return -2;
    }
    scanner_set_file_and_name(file, argv[1]);
    sym_table_init(); // 符号表初始化
    label_stack_init(); // 标签栈初始化
    syntax_analyse(); // 语法分析,语义分析,中间代码生成
    show_error_num();
    print_vars_in_addition_order(); // 按照添加顺序打印变量表
    print_strings(); // 打印串表
    print_funs(); // 打印函数表和中间代码
    optimize_funs(); // 中间代码优化
    show_error_num();
    sym_table_destroy(); // 销毁符号表
    destroy_token_queue(); // 销毁token队列
    label_stack_destroy(); // 销毁标签栈
    return 0;
}



